package _02创建对象;

import _01定义类.Dog;

public class MemoryDemo {

	public static void main(String[] args) 
	{
		
		// 1. new出来的对象是在堆内存
		// 2. 如果堆内存中对象没有引用变量去指向，就会被垃圾回收（可以认为 狗没牵着这狗绳，会被抓走）
	
		// 定义狗类 的引用(d1是狗的引用变量，并不是狗对象)
		Dog d1 = null;		
//		d1.name = "小白";
//		Exception in thread "main" java.lang.NullPointerException
//		at _02创建对象.MemoryDemo.main(MemoryDemo.java:12)
		
		// 创建狗对象 小白 
		d1 = new Dog(); // new出来的对象是在堆内存
		d1.name = "小白";
		d1.age = 2;

		// d1如果设置为空，则前面指向的狗对象 会被垃圾回收掉GC(可以认为小白这只狗狗绳断了，狗跑掉了) 
		d1 = null;		
		
		// d1指向了一个新的Dog对象 小花
		d1 = new Dog();
		d1.name = "小花";
		d1.age = 1;
		
		// d2 也去指向d1指向的狗，则他们指向的是同一只狗
		Dog d2 = d1;

		
		
	}

}
